<?php

/**
 * Interface para a view
 * @abstract
 */
abstract class Ehrp_View {

    /**
     * Dados da view
     *
     * @var array
     */
    protected $_data = array();

    /**
     * Fabrica de instancia da view
     *
     * @param String $file
     * @param Array $data
     * @return Object View
     */
    public static function factory($file = NULL, array $data = NULL) {
        return new View($file, $data);
    }

    /**
     * Contrutor da view
     *
     * @param String $file
     * @param Array $data
     */
    private function __construct($file = NULL, array $data = NULL) {
        if ($file !== NULL) {
            try {
                Loader::loadFile($file);
            } catch (Exception $e) {
                echo "The requested view: {$file} was not found";
            }
        }

        if ($data !== NULL) {
            $this->_data = $data + $this->_data;
        }
    }

    /**
     * Exibe a view na tela.
     * Torna as variaveis disponiveis na view.
     * 
     * Por Exemplo, em uma Action de um controller poderia haver:
     * 
     *   Ehrp_view::factory(null,array("nome"=>"jose","telefone"=>"5555-5555"))->show("cadastro"); 
     * 
     *   
     * No arquivo "views/cadastro.php" poderíamos fazer sem problemas:
     * 
     *     echo "nome=".$nome." e telefone=".$telefone;
     * 
     * que obteriamos:
     * 
     *     nome=jose e telefone=5555-5555
     *
     * @param String $template
     * 
     */
    public function show($template=NULL) {

        foreach ($this->_data as $key => $value) {
            $$key = $value;
        }
        if ($template !== NULL) {
            try {
                include(APP_PATH . "views" . DIRECTORY_SEPARATOR . $template . EXT);
            } catch (Exception $e) {
                echo "The requested template: {$template} was not found";
            }
        }
    }

}

?>
